#include<bits/stdc++.h>
using namespace std;
int solution(vector<int>&arr){
    unordered_map<int, int> dic;
    for (int i = 0; i < arr.size(); i++) {
        dic[arr[i]]++;
    }
    int ans = 0;
    for (auto it = dic.begin(); it != dic.end(); ++it) {
        int m = it->first;
        int n = it->second;
        ans += ceil(n / static_cast<double>(m + 1)) * (m + 1);
        // 大于等于（）的最小整数
    }
    return ans;
}

int main() {
    
    string s;
    getline(cin, s);
    istringstream iss(s);
    vector<int> arr;
    int num;
    while (iss >> num) {
        arr.push_back(num);
    }
    cout << solution(arr) << endl;
    return 0;
}
/*
#include <bits/stdc++.h>
using namespace std;
 
int main() {
    vector<int> nums;
 
    int tmp;
    while (cin >> tmp) {
        nums.emplace_back(tmp);
    }
 
    map<int, int> cnts;
 
    // num是反馈，cnts[num]是给出相同反馈的（小朋友）数量
    for (const auto &num: nums) {
        if (cnts.count(num) > 0) {
            cnts[num] += 1;
        } else {
            cnts[num] = 1;
        }
    }
 
    // ans 记录题解
    int ans = 0;
    for (const auto &pair: cnts) {
        int key = pair.first;
        int val = pair.second;
 
        // key是反馈，假设某小朋友反馈有key个人和自己一个小区，那么该小区总人数为total = key+1
        int total = key + 1;
        ans += (int) ceil(val * 1.0 / total) * total;
    }
 
    cout << ans << endl;
 
    return 0;
}*/